package creatingPattern.abstractFactory;

/**
 * @Author: Alex Hu
 * Date: 2020/2/22 6:26 下午
 * Content:
 */

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

/**
 * XML配置文件读取工具
 * 设计意图：提供从XML配置文件中读取对象的功能
 * 使用场景：当需要通过配置文件动态创建对象时使用
 */
public class ReadXML {
    /**
     * 从XML配置文件中获取对象
     * 设计意图：通过反射机制创建配置文件中指定的对象
     * 使用场景：当需要根据配置文件动态创建对象时调用
     * @return 返回创建的对象
     * @throws Exception 当配置文件读取或对象创建失败时抛出异常
     */
    public static Object getObject() throws Exception {
        try {
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc;
            doc = builder.parse(new File("src/main/java/creatingPattern/abstractFactory/config.xml"));
            NodeList nl = doc.getElementsByTagName("className");
            Node classNode = nl.item(0).getFirstChild();
            String cName = "creatingPattern.abstractFactory." + classNode.getNodeValue();
            System.out.println("新类名：" + cName);
            Class<?> c = Class.forName(cName);
            Object obj = c.newInstance();
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
